package com.schedualnew.mq.constvalue;

import java.util.Arrays;

public enum ExamStatusEnum {

    //    01开单、02审核、03收费、
//    04退费、05申请单登记、06申请单执行、
//    07报告生成、08报告审核、09报告发布、
//    10撤销登记、11报告撤回、12护士核对、
//    13申请单取消、14体检质控锁定、15体检指控取消锁定、
//    16撤销执行、17采图完成、18已预约、19取消预约

    //    switch (status) {
//        case "01": {
//            return "已锁定";
//        }
//        case "02": {
//            return "已申请";
//        }
//        case "04": {
//            return "已退回";
//        }
//        case "06":
//        case "08": {
//            return "已预约";
//        }
//        case "10": {
//            return "已报到";
//        }
//        case "40": {
//            return "已检查";
//        }
//        case "60": {
//            return "初步报告";
//        }
//        case "70": {
//            return "确认报告";
//        }
//        default: {
//            return "未预约";
//        }
//    }


    /***
     * 签到
     */
    SCHEDULED("03", "18", "已预约"),
    CANCEL_SCHEDULED("00", "19", "取消预约"),
    CREATE("10", "05", "申请单登记"),
    SIGN("10", "06", "申请单执行"),
    REPORT_CONFIRM("70", "07", "报告生成"),
    REPORT_CONFIRM1("70", "08", "报告审核"),
    REPORT_CONFIRM2("70", "09", "报告发布"),
    /**
     * 取消报到状态，恢复到未预约状态-取消预约
     */
    REVOCATION("08", "10", "撤销登记"),
    REFUND("04", "04", "退费"),
//    18已预约、19取消预约

    /**
     * 排队叫号系统：
     * <p>
     * 预约系统这边取状态需要加一种了，报到（申请单登记）、检查完成（审批报告）、取消报到（撤销登记）
     * PS35013（申请单状态变更接口）添加以下三种状态：20排队叫号系统报到、21排队叫号系统检查完成22排队叫号系统取消报到
     */
    SIGN2("10", "20", "排队叫号系统报到"),
    REPORT_CONFIRM3("70", "21", "排队叫号系统检查完成"),
    REVOCATION2("70", "22", "排队叫号系统取消报到"),
    ;

    private String sourceType;
    private String descStatus;
    private String hisStatusCode;

    public String getSourceType() {
        return sourceType;
    }

    public String getDescStatus() {
        return descStatus;
    }

    public String getHisStatusCode() {
        return hisStatusCode;
    }

    ExamStatusEnum(String sourceType, String hisStatus, String des) {
        this.sourceType = sourceType;
        this.hisStatusCode = hisStatus;
        this.descStatus = des;
    }


    /**
     * 我们的状态对应his的状态
     *
     * @param sourceType
     * @return
     */
    public static ExamStatusEnum getByActType(String sourceType) {
        ExamStatusEnum value = Arrays.asList(ExamStatusEnum.values()).stream()
                .filter(x -> x.getSourceType().equals(sourceType))
                .findFirst().orElse(null);

        return value;
    }

    /**
     * his 检查状态对应我们的状态
     *
     * @param statusCode
     * @return
     */
    public static ExamStatusEnum getByStatusCode(String statusCode) {
        ExamStatusEnum value = Arrays.asList(ExamStatusEnum.values()).stream()
                .filter(x -> x.getHisStatusCode().equals(statusCode))
                .findFirst().orElse(null);

        return value;
    }
}
